package Test;
// 死锁问题
public class Dead implements Runnable {

    //静态变量被所有对象共享，在内存中只有一个副本，在类初次加载的时候才会初始化
    //此案例研究的是 共享资源型的死锁问题，所以两个锁是被的多个线程共享的，属于类级变量
    static Object object1 = new Object();
    static Object object2 = new Object();
    Boolean flag;

    public Dead(Boolean flag){
        this.flag = flag;
    }
    @Override
    public void run() {
        if (flag){
            while (true){
                synchronized (object1){
                    System.out.println("得到锁一");
                    synchronized (object2){
                        System.out.println("得到锁二");
                    }
                }
            }
        }else {
            while (true){
                synchronized (object2){
                    System.out.println("得到锁二");
                    synchronized (object1){
                        System.out.println("得到锁一");
                    }
                }
            }
        }
    }
    public static void main(String[] args) {
        new Thread(new Dead(true),"线程一").start();
        new Thread(new Dead(false),"线程二").start();
    }
}
